|
ARD2
1.00 for Rev B. Hardware
Airbag Reference Demonstrator using MPC5604P
|
00001 00020 #ifndef SBC_AL_H_ 00021 #define SBC_AL_H_ 00022 /* 00023 ************************************************************** 00024 * Defines, Macros and Typedefs 00025 **************************************************************/ 00026 /*** Constant Macros ***/ 00027 /* Default Yes and No defines */ 00028 #ifndef TRUE 00029 #define TRUE (1u) 00030 #endif 00031 #ifndef CLEAR 00032 #define CLEAR (0u) 00033 #endif 00034 00035 #ifndef BITS_IN_BYTE 00036 #define BITS_IN_BYTE (8u) 00037 #endif 00038 #ifndef BYTES_IN_16 00039 #define BYTES_IN_16 (2u) 00040 #endif 00041 #ifndef BYTES_IN_32 00042 #define BYTES_IN_32 (4u) 00043 #endif 00044 #ifndef BIT_DEFINITION 00045 #define BIT_DEFINITION 00046 #define BIT0 (1u << 0u) 00047 #define BIT1 (1u << 1u) 00048 #define BIT2 (1u << 2u) 00049 #define BIT3 (1u << 3u) 00050 #define BIT4 (1u << 4u) 00051 #define BIT5 (1u << 5u) 00052 #define BIT6 (1u << 6u) 00053 #define BIT7 (1u << 7u) 00054 #define BIT8 (1u << 8u) 00055 #define BIT9 (1u << 9u) 00056 #define BIT10 (1u << 10) 00057 #define BIT11 (1u << 11) 00058 #define BIT12 (1u << 12) 00059 #define BIT13 (1u << 13) 00060 #define BIT14 (1u << 14) 00061 #define BIT15 (1u << 15) 00062 #define BIT16 (1u << 16) 00063 #define BIT17 (1u << 17) 00064 #define BIT18 (1u << 18) 00065 #define BIT19 (1u << 19) 00066 #define BIT20 (1u << 20) 00067 #define BIT21 (1u << 21) 00068 #define BIT22 (1u << 22) 00069 #define BIT23 (1u << 23) 00070 #define BIT24 (1u << 24) 00071 #define BIT25 (1u << 25) 00072 #define BIT26 (1u << 26) 00073 #define BIT27 (1u << 27) 00074 #define BIT28 (1u << 28) 00075 #define BIT29 (1u << 29) 00076 #define BIT30 (1u << 30) 00077 #define BIT31 (1u << 31) 00078 #endif 00079 00080 /* Masks for Presence/absence of squibs */ 00081 #define SQUIB_CH0_PRESENT (BIT0) 00082 #define SQUIB_CH0_ABSENT (0u) 00083 #define SQUIB_CH1_PRESENT (BIT1) 00084 #define SQUIB_CH1_ABSENT (0u) 00085 #define SQUIB_CH2_PRESENT (BIT2) 00086 #define SQUIB_CH2_ABSENT (0u) 00087 #define SQUIB_CH3_PRESENT (BIT3) 00088 #define SQUIB_CH3_ABSENT (0u) 00089 #define SQUIB_CH4_PRESENT (BIT4) 00090 #define SQUIB_CH4_ABSENT (0u) 00091 #define SQUIB_CH5_PRESENT (BIT5) 00092 #define SQUIB_CH5_ABSENT (0u) 00093 #define SQUIB_CH6_PRESENT (BIT6) 00094 #define SQUIB_CH6_ABSENT (0u) 00095 #define SQUIB_CH7_PRESENT (BIT7) 00096 #define SQUIB_CH7_ABSENT (0u) 00097 #define SQUIB_CH8_PRESENT (BIT8) 00098 #define SQUIB_CH8_ABSENT (0u) 00099 #define SQUIB_CH9_PRESENT (BIT9) 00100 #define SQUIB_CH9_ABSENT (0u) 00101 #define SQUIB_CH10_PRESENT (BIT10) 00102 #define SQUIB_CH10_ABSENT (0u) 00103 #define SQUIB_CH11_PRESENT (BIT11) 00104 #define SQUIB_CH11_ABSENT (0u) 00105 00106 /* Masks for Presence/absence of Satellite sensors */ 00107 #define SAT_CH0_SLOT0_PRESENT (BIT0) 00108 #define SAT_CH0_SLOT0_ABSENT (0u) 00109 #define SAT_CH0_SLOT1_PRESENT (BIT1) 00110 #define SAT_CH0_SLOT1_ABSENT (0u) 00111 #define SAT_CH0_SLOT2_PRESENT (BIT2) 00112 #define SAT_CH0_SLOT2_ABSENT (0u) 00113 #define SAT_CH1_SLOT0_PRESENT (BIT3) 00114 #define SAT_CH1_SLOT0_ABSENT (0u) 00115 #define SAT_CH1_SLOT1_PRESENT (BIT4) 00116 #define SAT_CH1_SLOT1_ABSENT (0u) 00117 #define SAT_CH1_SLOT2_PRESENT (BIT5) 00118 #define SAT_CH1_SLOT2_ABSENT (0u) 00119 #define SAT_CH2_SLOT0_PRESENT (BIT6) 00120 #define SAT_CH2_SLOT0_ABSENT (0u) 00121 #define SAT_CH2_SLOT1_PRESENT (BIT7) 00122 #define SAT_CH2_SLOT1_ABSENT (0u) 00123 #define SAT_CH2_SLOT2_PRESENT (BIT8) 00124 #define SAT_CH2_SLOT2_ABSENT (0u) 00125 #define SAT_CH3_SLOT0_PRESENT (BIT9) 00126 #define SAT_CH3_SLOT0_ABSENT (0u) 00127 #define SAT_CH3_SLOT1_PRESENT (BIT10) 00128 #define SAT_CH3_SLOT1_ABSENT (0u) 00129 #define SAT_CH3_SLOT2_PRESENT (BIT11) 00130 #define SAT_CH3_SLOT2_ABSENT (0u) 00131 00132 /* Defines for Squibs not being fired */ 00133 #define SQUIB_CH0_NOT_FIRED CLEAR 00134 #define SQUIB_CH1_NOT_FIRED CLEAR 00135 #define SQUIB_CH2_NOT_FIRED CLEAR 00136 #define SQUIB_CH3_NOT_FIRED CLEAR 00137 #define SQUIB_CH4_NOT_FIRED CLEAR 00138 #define SQUIB_CH5_NOT_FIRED CLEAR 00139 #define SQUIB_CH6_NOT_FIRED CLEAR 00140 #define SQUIB_CH7_NOT_FIRED CLEAR 00141 #define SQUIB_CH8_NOT_FIRED CLEAR 00142 #define SQUIB_CH9_NOT_FIRED CLEAR 00143 #define SQUIB_CH10_NOT_FIRED CLEAR 00144 #define SQUIB_CH11_NOT_FIRED CLEAR 00145 00146 /* Defines for satellites not being crashed */ 00147 #define SAT_CH0_SLOT0_NOT_CRASHED CLEAR 00148 #define SAT_CH0_SLOT1_NOT_CRASHED CLEAR 00149 #define SAT_CH0_SLOT2_NOT_CRASHED CLEAR 00150 #define SAT_CH1_SLOT0_NOT_CRASHED CLEAR 00151 #define SAT_CH1_SLOT1_NOT_CRASHED CLEAR 00152 #define SAT_CH1_SLOT2_NOT_CRASHED CLEAR 00153 #define SAT_CH2_SLOT0_NOT_CRASHED CLEAR 00154 #define SAT_CH2_SLOT1_NOT_CRASHED CLEAR 00155 #define SAT_CH2_SLOT2_NOT_CRASHED CLEAR 00156 #define SAT_CH3_SLOT0_NOT_CRASHED CLEAR 00157 #define SAT_CH3_SLOT1_NOT_CRASHED CLEAR 00158 #define SAT_CH3_SLOT2_NOT_CRASHED CLEAR 00159 00160 /* Defines for satellites being crashed */ 00161 #define SAT_CH0_SLOT0_CRASHED BIT0 00162 #define SAT_CH0_SLOT1_CRASHED BIT1 00163 #define SAT_CH0_SLOT2_CRASHED BIT2 00164 #define SAT_CH1_SLOT0_CRASHED BIT3 00165 #define SAT_CH1_SLOT1_CRASHED BIT4 00166 #define SAT_CH1_SLOT2_CRASHED BIT5 00167 #define SAT_CH2_SLOT0_CRASHED BIT6 00168 #define SAT_CH2_SLOT1_CRASHED BIT7 00169 #define SAT_CH2_SLOT2_CRASHED BIT8 00170 #define SAT_CH3_SLOT0_CRASHED BIT9 00171 #define SAT_CH3_SLOT1_CRASHED BIT10 00172 #define SAT_CH3_SLOT2_CRASHED BIT11 00173 00174 /* Let's count stuff */ 00175 #define SBC_N_SATELLITES_POSSIBLE 12u 00176 #define SBC_N_SQUIBS_POSSIBLE 12u 00177 #define SBC_SENSOR_DATA_ARRAY_SIZE 264u 00178 #define SBC_N_CONFIG_BUFFER_SIZE 60u 00179 00180 00181 /* Nominal values */ 00182 #define SBC_FIRED_SQUIB_MIN_TIME 0x8u 00183 00184 00185 00186 00187 00188 #define SBC_TEST_SBC_FAILED BIT14 00189 #define SBC_TEST_SAT_0 BIT0 00190 #define SBC_TEST_SAT_1 BIT1 00191 #define SBC_TEST_SAT_2 BIT2 00192 #define SBC_TEST_SAT_3 BIT3 00193 #define SBC_TEST_SAT_4 BIT4 00194 #define SBC_TEST_SAT_5 BIT5 00195 #define SBC_TEST_SAT_6 BIT6 00196 #define SBC_TEST_SAT_7 BIT7 00197 #define SBC_TEST_SAT_8 BIT8 00198 #define SBC_TEST_SAT_9 BIT9 00199 #define SBC_TEST_SAT_10 BIT10 00200 #define SBC_TEST_SAT_11 BIT11 00201 #define SBC_TEST_ALL_SAT (BIT12 - 1u) 00202 #define SBC_TEST_SQUIB_0 BIT16 00203 #define SBC_TEST_SQUIB_1 BIT17 00204 #define SBC_TEST_SQUIB_2 BIT18 00205 #define SBC_TEST_SQUIB_3 BIT19 00206 #define SBC_TEST_SQUIB_4 BIT20 00207 #define SBC_TEST_SQUIB_5 BIT21 00208 #define SBC_TEST_SQUIB_6 BIT22 00209 #define SBC_TEST_SQUIB_7 BIT23 00210 #define SBC_TEST_SQUIB_8 BIT24 00211 #define SBC_TEST_SQUIB_9 BIT25 00212 #define SBC_TEST_SQUIB_10 BIT26 00213 #define SBC_TEST_SQUIB_11 BIT27 00214 #define SBC_TEST_ALL_SQUIB (BIT28 - 1u) 00215 00216 /*** Function Macros ***/ 00217 #ifndef N_ELEMENTS 00218 #define N_ELEMENTS(X) (sizeof(X)/sizeof(*(X))) 00219 #endif 00220 00221 /*** Enums ***/ 00222 00223 /*** TypeDefs ***/ 00224 00225 /* 00226 ************************************************************** 00227 * Declarations 00228 **************************************************************/ 00229 /*** Extern ***/ 00230 /* Following global variable is used to show the latest time when an SBC */ 00231 /* command has been scheduled. */ 00232 extern uint32_t gu32SBCTime; 00233 extern uint16_t gu16ActivePSI5Channels; 00234 extern uint16_t gu16ActiveSquibChannels; 00235 extern uint16_t gu16FiredSquibs; 00236 extern uint16_t gu16SquibsToFire; 00237 extern uint16_t gu16CrashedSatellites; 00238 extern uint16_t gu16ConfirmedSatellites; 00239 extern uint8_t gu8SBCSatelliteData[]; 00240 /*** Globals ***/ 00241 00242 /*** Constants ***/ 00243 extern const uint16_t cu16PresentSquibs; 00244 extern const uint16_t cu16PresentSatellites; 00245 00246 /* 00247 ************************************************************** 00248 * Function Prototypes 00249 **************************************************************/ 00250 /* 00251 ****************************************************************************** 00252 * 00253 * Function: u8fnSBCPreSchedulerEnableWarningLamp() 00254 * 00255 */ 00264 uint8_t u8fnSBCPreSchedulerEnableWarningLamp(uint8_t u8Enable); 00265 /* 00266 ****************************************************************************** 00267 * 00268 * Function: u8fnSBCEnableWarningLamp() 00269 * 00270 */ 00279 uint8_t u8fnSBCEnableWarningLamp(uint8_t u8Enable); 00280 /* 00281 ****************************************************************************** 00282 * 00283 * Function: vfnSBCPreSchedulerInit() 00284 * 00285 */ 00293 void vfnSBCPreSchedulerInit(void); 00294 /* 00295 ****************************************************************************** 00296 * 00297 * Function: vfnCG147ToggleResetPin() 00298 * 00299 */ 00307 void vfnSBCResetPin(uint32_t u32State); 00308 /* 00309 ****************************************************************************** 00310 * 00311 * Function: u8fnSBCInit() 00312 * 00313 */ 00327 uint32_t u32fnSBCInit(void); 00328 /* 00329 ****************************************************************************** 00330 * 00331 * Function: u32fnSBCPerformInitialTests() 00332 * 00333 */ 00351 uint32_t u32fnSBCPerformInitialTests(void); 00352 /* 00353 ****************************************************************************** 00354 * 00355 * Function: u32fnSBCSchedulePSISat() 00356 * 00357 */ 00365 uint32_t u32fnSBCSchedulePSISat(uint16_t* pu16RawAccelArray); 00366 /* 00367 ****************************************************************************** 00368 * 00369 * Function: u8fnSBCSchedulePSync() 00370 * 00371 */ 00380 uint8_t u8fnSBCSchedulePSync(void); 00381 /* 00382 ****************************************************************************** 00383 * 00384 * Function: u8fnSBCSyncSM() 00385 * 00386 */ 00396 uint8_t u8fnSBCSyncSM(const uint8_t u8Period); 00397 /* 00398 ****************************************************************************** 00399 * 00400 * Function: u32fnSBCExtractPSISat() 00401 * 00402 */ 00413 uint32_t u32fnSBCExtractPSISat(uint16_t* pu16RawAccelArray, 00414 uint16_t* pu16Filtered); 00415 /* 00416 ****************************************************************************** 00417 * 00418 * Function: u32fnSBCScheduleCmd() 00419 * 00420 */ 00430 uint32_t u32fnSBCScheduleCmd(uint8_t u8Cmd, uint8_t u8Arg, 00431 uint16_t* pu16Response); 00432 /* 00433 ****************************************************************************** 00434 * 00435 * Function: u32fnSBCFireSquibs() 00436 * 00437 */ 00446 uint32_t u32fnSBCFireSquibs(const uint16_t cu16SquibMask); 00447 /* 00448 ****************************************************************************** 00449 * 00450 * Function: u16fnSBCGatherPSI5SatelliteData() 00451 * 00452 */ 00469 uint16_t u16fnSBCGatherPSI5SatelliteData(uint8_t* pu8PSI5Data); 00470 /* 00471 ****************************************************************************** 00472 * 00473 * Function: u16fnSBCTestPSI5SatelliteData() 00474 * 00475 */ 00494 static uint16_t u16fnSBCTestPSI5SatelliteData(const uint8_t* au8SBCSatData, 00495 const uint8_t* au8SBCSatBasis, 00496 const uint8_t* au8SBCSatTestFilt, 00497 const uint16_t* pu16ActiveSat); 00498 /* 00499 ****************************************************************************** 00500 * 00501 * Function: u32fnSBCSquibFiringStatus() 00502 * 00503 */ 00517 uint32_t u32fnSBCSquibFiringStatus(uint16_t* pu16Response); 00518 #endif /* SBC_AL_H_ */